package com.example.canal.event.listener;

import com.example.canal.common.bean.CanalBean;
import com.example.canal.common.util.DbChangeExecutor;
import org.springframework.context.ApplicationEvent;

import java.util.concurrent.Executor;

/**
 * 同步版本的监听消费父类：
 * 如果消费时，对数据变动的顺序敏感（如果同一行数据多次变动，业务要求java接收到的顺序不能乱），则需要继承此类
 *
 * @param <T>
 */
public abstract class BaseDBChangeListenerSync<T extends ApplicationEvent> extends AbstractDBChangeListener<T> {


    public void onApplicationEvent(T t) {
        CanalBean canalBean = preEvent(t);
        Executor executor = DbChangeExecutor.getExecutorByTableName(canalBean);
        if (canalBean == null) {
            return;
        } else {
            process(canalBean,executor);
        }
    }


}
